package dao;

import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import model.Produto;
import model.TipoConsulta;

public class ProdutoDAO {

    private final EntityManager em;

    //Precisa deste método construtor para passar o parâmetro que vem do EJB
    public ProdutoDAO(EntityManager emDAO) {
        this.em = emDAO;
    }

    public boolean gravar(Produto p) {
        em.persist(p);
        return true;
    }

    public boolean atualizar(Produto p) {
        em.merge(p);
        return true;
    }

    public List<Produto> consultar() {
        return consultar(TipoConsulta.TODOS, "", "");
    }

    public List<Produto> consultarCodigo(String valor) {
        return consultar(TipoConsulta.CODIGO, "codigo", valor.trim());
    }

    public List<Produto> consultarDescricao(String valor) {
        return consultar(TipoConsulta.DESCRICAO, "descricao", valor.trim());
    }

    private List<Produto> consultar(TipoConsulta tipo, String coluna, String valor) {

        String sql = "select p from Produto p";
        if (!coluna.trim().equals("")) {
            sql = sql.concat(" where p." + coluna + " = :" + coluna);
        }

        System.out.println("QUERY: " + sql);

        Query q = (Query) em.createQuery(sql);
        if (!coluna.trim().equals("")) {
            if (tipo == TipoConsulta.CODIGO) {
                q.setParameter(coluna, new Integer(valor));
            } else {
                q.setParameter(coluna, valor);
            }
        }
        List<Produto> retorno = q.getResultList();

        return retorno;
    }
}
